www.gusucode.com > VC++ P2P下载软件源代码-源码程序 > VC++ P2P下载软件源代码-源码程序\code\windows\FavoritesFrm.cpp
//Download by http://www.NewXing.com /* * Copyright (C) 2001-2003 Jacek Sieka, j_s@telia.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "stdafx.h" #include "../client/DCPlusPlus.h" #include "Resource.h" #include "FavoritesFrm.h" #include "HubFrame.h" #include "FavHubProperties.h" #include "../client/ClientManager.h" #include "../client/StringTokenizer.h" FavoriteHubsFrame* FavoriteHubsFrame::frame = NULL; int FavoriteHubsFrame::columnIndexes[] = { COLUMN_NAME, COLUMN_DESCRIPTION, COLUMN_NICK, COLUMN_PASSWORD, COLUMN_SERVER, COLUMN_USERDESCRIPTION }; int FavoriteHubsFrame::columnSizes[] = { 200, 290, 125, 100, 100, 125 }; static ResourceManager::Strings columnNames[] = { ResourceManager::AUTO_CONNECT, ResourceManager::DESCRIPTION, ResourceManager::NICK, ResourceManager::PASSWORD, ResourceManager::SERVER, ResourceManager::USER_DESCRIPTION }; LRESULT FavoriteHubsFrame::onCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { // Only one of this window please... dcassert(frame == NULL); frame = this; SetWindowText(CSTRING(FAVORITE_HUBS)); ctrlHubs.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_HSCROLL | WS_VSCROLL | LVS_REPORT | LVS_SHOWSELALWAYS , WS_EX_CLIENTEDGE, IDC_HUBLIST); if(BOOLSETTING(FULL_ROW_SELECT)) { ctrlHubs.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_HEADERDRAGDROP); } else { ctrlHubs.SetExtendedListViewStyle(LVS_EX_CHECKBOXES | LVS_EX_HEADERDRAGDROP); } ctrlHubs.SetBkColor(WinUtil::bgColor); ctrlHubs.SetTextBkColor(WinUtil::bgColor); ctrlHubs.SetTextColor(WinUtil::textColor); // Create listview columns WinUtil::splitTokens(columnIndexes, SETTING(FAVORITESFRAME_ORDER), COLUMN_LAST); WinUtil::splitTokens(columnSizes, SETTING(FAVORITESFRAME_WIDTHS), COLUMN_LAST); for(int j=0; j<COLUMN_LAST; j++) { int fmt = LVCFMT_LEFT; ctrlHubs.InsertColumn(j, CSTRING_I(columnNames[j]), fmt, columnSizes[j], j); } ctrlHubs.SetColumnOrderArray(COLUMN_LAST, columnIndexes); ctrlConnect.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON , 0, IDC_CONNECT); ctrlConnect.SetWindowText(CSTRING(CONNECT)); ctrlConnect.SetFont(WinUtil::font); ctrlNew.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON , 0, IDC_NEWFAV); ctrlNew.SetWindowText(CSTRING(NEW)); ctrlNew.SetFont(WinUtil::font); ctrlProps.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON , 0, IDC_EDIT); ctrlProps.SetWindowText(CSTRING(PROPERTIES)); ctrlProps.SetFont(WinUtil::font); ctrlRemove.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON , 0, IDC_REMOVE); ctrlRemove.SetWindowText(CSTRING(REMOVE)); ctrlRemove.SetFont(WinUtil::font); ctrlUp.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON , 0, IDC_MOVE_UP); ctrlUp.SetWindowText(CSTRING(MOVE_UP)); ctrlUp.SetFont(WinUtil::font); ctrlDown.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_PUSHBUTTON , 0, IDC_MOVE_DOWN); ctrlDown.SetWindowText(CSTRING(MOVE_DOWN)); ctrlDown.SetFont(WinUtil::font); HubManager::getInstance()->addListener(this); updateList(HubManager::getInstance()->getFavoriteHubs()); hubsMenu.CreatePopupMenu(); hubsMenu.AppendMenu(MF_STRING, IDC_CONNECT, CSTRING(CONNECT)); hubsMenu.AppendMenu(MF_STRING, IDC_NEWFAV, CSTRING(NEW)); hubsMenu.AppendMenu(MF_STRING, IDC_EDIT, CSTRING(PROPERTIES)); hubsMenu.AppendMenu(MF_STRING, IDC_MOVE_UP, CSTRING(MOVE_UP)); hubsMenu.AppendMenu(MF_STRING, IDC_MOVE_DOWN, CSTRING(MOVE_DOWN)); hubsMenu.AppendMenu(MF_SEPARATOR, 0, (LPCTSTR)NULL); hubsMenu.AppendMenu(MF_STRING, IDC_REMOVE, CSTRING(REMOVE)); nosave = false; bHandled = FALSE; return TRUE; } LRESULT FavoriteHubsFrame::onDoubleClickHublist(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/) { if(!checkNick()) return 0; NMITEMACTIVATE* item = (NMITEMACTIVATE*) pnmh; if(item->iItem != -1) { FavoriteHubEntry* entry = (FavoriteHubEntry*)ctrlHubs.GetItemData(item->iItem); HubFrame::openWindow(m_hWndMDIClient, getTab(), entry->getServer(), entry->getNick(), entry->getPassword(), entry->getUserDescription()); } return 0; } LRESULT FavoriteHubsFrame::onEnter(int /*idCtrl*/, LPNMHDR /* pnmh */, BOOL& /*bHandled*/) { if(!checkNick()) return 0; int item = ctrlHubs.GetNextItem(-1, LVNI_FOCUSED); if(item != -1) { FavoriteHubEntry* entry = (FavoriteHubEntry*)ctrlHubs.GetItemData(item); HubFrame::openWindow(m_hWndMDIClient, getTab(), entry->getServer(), entry->getNick(), entry->getPassword(), entry->getUserDescription()); } return 0; } LRESULT FavoriteHubsFrame::onClickedConnect(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { if(!checkNick()) return 0; int i = -1; while( (i = ctrlHubs.GetNextItem(i, LVNI_SELECTED)) != -1) { FavoriteHubEntry* entry = (FavoriteHubEntry*)ctrlHubs.GetItemData(i); HubFrame::openWindow(m_hWndMDIClient, getTab(), entry->getServer(), entry->getNick(), entry->getPassword(), entry->getUserDescription()); } return 0; } LRESULT FavoriteHubsFrame::onRemove(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { int i = -1; while( (i = ctrlHubs.GetNextItem(-1, LVNI_SELECTED)) != -1) { HubManager::getInstance()->removeFavorite((FavoriteHubEntry*)ctrlHubs.GetItemData(i)); } return 0; } LRESULT FavoriteHubsFrame::onEdit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { int i = -1; if((i = ctrlHubs.GetNextItem(i, LVNI_SELECTED)) != -1) { FavoriteHubEntry* e = (FavoriteHubEntry*)ctrlHubs.GetItemData(i); dcassert(e != NULL); FavHubProperties dlg(e); if(dlg.DoModal(m_hWnd) == IDOK) { ctrlHubs.SetItemText(i, COLUMN_NAME, e->getName().c_str()); ctrlHubs.SetItemText(i, COLUMN_DESCRIPTION, e->getDescription().c_str()); ctrlHubs.SetItemText(i, COLUMN_SERVER, e->getServer().c_str()); ctrlHubs.SetItemText(i, COLUMN_NICK, e->getNick(false).c_str()); ctrlHubs.SetItemText(i, COLUMN_PASSWORD, string(e->getPassword().size(), '*').c_str()); ctrlHubs.SetItemText(i, COLUMN_USERDESCRIPTION, e->getUserDescription().c_str()); } } return 0; } LRESULT FavoriteHubsFrame::onNew(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { FavoriteHubEntry e; FavHubProperties dlg(&e); if(dlg.DoModal((HWND)*this) == IDOK) HubManager::getInstance()->addFavorite(e); return 0; } bool FavoriteHubsFrame::checkNick() { if(SETTING(NICK).empty()) { MessageBox(CSTRING(ENTER_NICK)); return false; } return true; } LRESULT FavoriteHubsFrame::onMoveUp(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { nosave = true; int j = ctrlHubs.GetItemCount(); FavoriteHubEntry::List& fh = HubManager::getInstance()->getFavoriteHubs(); ctrlHubs.SetRedraw(FALSE); for(int i = 1; i < j; ++i) { if(ctrlHubs.GetItemState(i, LVIS_SELECTED)) { FavoriteHubEntry* e = fh[i]; fh.erase(fh.begin()+i); ctrlHubs.DeleteItem(i); fh.insert(fh.begin()+(i-1), e); addEntry(e, i-1); ctrlHubs.SetItemState(i-1, LVIS_SELECTED, LVIS_SELECTED); } } ctrlHubs.SetRedraw(TRUE); nosave = false; HubManager::getInstance()->save(); return 0; } LRESULT FavoriteHubsFrame::onMoveDown(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { int j = ctrlHubs.GetItemCount() - 2; FavoriteHubEntry::List& fh = HubManager::getInstance()->getFavoriteHubs(); nosave = true; ctrlHubs.SetRedraw(FALSE); for(int i = j; i >= 0; --i) { if(ctrlHubs.GetItemState(i, LVIS_SELECTED)) { FavoriteHubEntry* e = fh[i]; fh.insert(fh.begin()+(i+2), e); addEntry(e, i+2); ctrlHubs.SetItemState(i+2, LVIS_SELECTED, LVIS_SELECTED); fh.erase(fh.begin()+i); ctrlHubs.DeleteItem(i); } } ctrlHubs.SetRedraw(TRUE); nosave = false; HubManager::getInstance()->save(); return 0; } LRESULT FavoriteHubsFrame::onItemChanged(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/) { NMITEMACTIVATE* l = (NMITEMACTIVATE*)pnmh; if(!nosave && l->iItem != -1 && ((l->uNewState & LVIS_STATEIMAGEMASK) != (l->uOldState & LVIS_STATEIMAGEMASK))) { FavoriteHubEntry* f = (FavoriteHubEntry*)ctrlHubs.GetItemData(l->iItem); f->setConnect(ctrlHubs.GetCheckState(l->iItem) != FALSE); HubManager::getInstance()->save(); } return 0; } LRESULT FavoriteHubsFrame::onClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { HubManager::getInstance()->removeListener(this); WinUtil::saveHeaderOrder(ctrlHubs, SettingsManager::FAVORITESFRAME_ORDER, SettingsManager::FAVORITESFRAME_WIDTHS, COLUMN_LAST, columnIndexes, columnSizes); MDIDestroy(m_hWnd); return 0; } void FavoriteHubsFrame::UpdateLayout(BOOL bResizeBars /* = TRUE */) { RECT rect; GetClientRect(&rect); // position bars and offset their dimensions UpdateBarsPosition(rect, bResizeBars); CRect rc = rect; rc.bottom -=28; ctrlHubs.MoveWindow(rc); const long bwidth = 90; const long bspace = 10; rc = rect; rc.bottom -= 2; rc.top = rc.bottom - 22; rc.left = 2; rc.right = rc.left + bwidth; ctrlNew.MoveWindow(rc); rc.OffsetRect(bwidth+2, 0); ctrlProps.MoveWindow(rc); rc.OffsetRect(bwidth+2, 0); ctrlRemove.MoveWindow(rc); rc.OffsetRect(bspace + bwidth +2, 0); ctrlUp.MoveWindow(rc); rc.OffsetRect(bwidth+2, 0); ctrlDown.MoveWindow(rc); rc.OffsetRect(bspace + bwidth +2, 0); ctrlConnect.MoveWindow(rc); } void FavoriteHubsFrame::onAction(HubManagerListener::Types type, FavoriteHubEntry* entry) throw() { switch(type) { case HubManagerListener::FAVORITE_ADDED: addEntry(entry, ctrlHubs.GetItemCount()); break; case HubManagerListener::FAVORITE_REMOVED: ctrlHubs.DeleteItem(ctrlHubs.find((LPARAM)entry)); break; } }; /** * @file * $Id: FavoritesFrm.cpp,v 1.12 2003/07/15 14:53:12 arnetheduck Exp $ */